#include "head.h"
// #include "../include/user.h"
// #include "../include/list.h"

// 菜单
void MENU(link_list *list_u, link_list *list_adm)
{
    int menu_choice;
    printf("欢迎进入航班管理系统\n");
    printf("1.注册\n2.管理员登陆\n3.用户登录\n4.退出");
    scanf("%d", &menu_choice);
    switch (menu_choice)
    {
    case 1:
        reg(list_u, list_adm);
        break;
    case 2:
        log_in_admin(list_adm);
        break;
    case 3:
        log_in_user(list_u);
        break;
    case 4:
        exit(-1);
        break;
    default:
        break;
    }
}

// 注册
void reg(link_list *list_u, link_list *list_adm)
{

    if (NULL == list_u)
    {
        ERRLOG("链表的动态空间为NULL\n");
        return;
    }
    User_data reg_data;
    reg_data.level_id = Regular;
    char pwd[128];
    int flag_1 = 0;
    printf("注册界面\n");
    while (1)
    {
        if (flag_1 > 0)
        {
            printf("两次密码输入不相同 请重头开始注册\n");
        }
        printf("请输入你的用户名:\n");
        scanf("%s", reg_data.user_name);
        printf("请输入你的密码:\n");
        scanf("%s", reg_data.password);
        printf("请再次输入你的密码:\n");
        scanf("%s", pwd);
        if (strcmp(pwd, reg_data.password))
        {
            printf("两次密码输入不相同 请重新输入\n");
            continue;
        }
        else
        {
            printf("恭喜你 注册成功\n");
            break;
        }
    }
    insert_link_node(list_u, reg_data, 1);
    user_data_file_print(list_u, REGULAR_FILE);
    system("clear");
    // reg_menu(list_u, list_adm);
}

// 注册的副菜单
void reg_menu(link_list *list_u, link_list *list_adm)
{
    int choice_reg = 0;
    printf("注册完成,你有以下选择:\n");
    printf("1.返回主菜单\n2.直接登陆\n");
    switch (choice_reg)
    {
    case 1:
        MENU(list_u, list_adm);
        break;
    case 2:

        break;
    default:
        break;
    }
}

// 登陆
// 管理员登录
void log_in_admin(link_list *list_adm)
{
    user_data_file_scanf(list_adm, ADMIN_FILE);
    system("clear");
    char in_adm_name[MAX_INPUT_SIZE]; // 你输入的账号
    char in_adm_pwd[MAX_INPUT_SIZE];  // 你输入的密码

    // int flag_1 = 0;
    // int flag_2 = 0;
    // int num = 0; // 用于记录输入错误的次数

    while (1)
    {
        printf("请输入你的账号:\n");
        scanf("%s", in_adm_name);
        printf("请输入你的密码\n");
        scanf("%s", in_adm_pwd);
        Link_Node *node_adm = find_node_name(list_adm, in_adm_name);

        if (node_adm != NULL && !strcmp(node_adm->data.user_name, in_adm_name))
        {
            if (!strcmp(node_adm->data.password, in_adm_pwd))
            {
                printf("恭喜你 登陆成功\n");
            }
            else
            {
                printf("密码错误,请重新输入\n");
            }
        }
        else
        {
            printf("账号错误,请重新输入\n");
        }
    }
    system("clear");
}

// 用户登录
void log_in_user(link_list *list_u)
{
    user_data_file_scanf(list_u, ADMIN_FILE);
    system("clear");
    char in_u_name[MAX_INPUT_SIZE]; // 你输入的账号
    char in_u_pwd[MAX_INPUT_SIZE];  // 你输入的密码

    char flag_user;
    // int flag_1 = 0;
    // int flag_2 = 0;
    // int num = 0; // 用于记录输入错误的次数

    while (1)
    {
        printf("请输入你的账号:\n");
        scanf("%s", in_u_name);
        printf("请输入你的密码\n");
        scanf("%s", in_u_pwd);
        Link_Node *node_u = find_node_name(list_u, in_u_name);
        if (node_u != NULL)
        {
            if (!strcmp(node_u->data.user_name, in_u_name))
            {
                if (!strcmp(node_u->data.password, in_u_pwd))
                {
                    printf("恭喜你 登陆成功\n");
                }
                else
                {
                    printf("密码错误,请重新输入\n");
                }
            }
        }
        else
        {
            printf("账号错误,请重新输入\n");
            printf("是否重新登陆 (y / n)\n");
            scanf("%c", &flag_user);
            getchar();
            if ('y' == flag_user || 'Y' == flag_user)
            {
                system("clear");
                break;
            }
        }
    }
}

// 向文件写入用户信息
void user_data_file_print(link_list *list, const char *file_name)
{
    FILE *fp = fopen(file_name, "w");
    if (NULL == fp)
    {
        ERRLOG("文件创建失败\n");
        return;
    }
    // 光标移动到开头
    fseek(fp, 0, SEEK_SET);

    Link_Node *ptr = list->next;
    for (size_t i = 0; NULL != ptr; i++)
    {
        fprintf(fp, "%s\t%s\t%d\n", ptr->data.user_name, ptr->data.password, ptr->data.level_id);
        ptr = ptr->next;
    }
    fclose(fp);
}

// 向文件读取信息
void user_data_file_scanf(link_list *list, const char *file_name)
{
    // 以只读方式打开
    FILE *fp = fopen(file_name, "r");
    if (NULL == fp)
    {
        ERRLOG("文件创建失败\n");
        return;
    }
    // 移动光标到开头
    fseek(fp, 0, SEEK_SET);

    // 判断文件行数
    char ch = '0'; // 接收文件的字符
    int len = 0;   // 判断文件的行数
    while (EOF != (ch = fgetc(fp)))
    {
        if ('\n' == ch)
        {
            len++;
        }
    }
    // 移动光标到开头
    fseek(fp, 0, SEEK_SET);
    User_data data;
    for (size_t i = 0; i < len; i++)
    {
        fscanf(fp, "%s\t%s\t%d", data.user_name, data.password, &data.level_id);
        insert_link_node(list, data, i + 1);
    }
    fclose(fp);
    return;
}